package com.sunrise.comunicacao.bean;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ComponentSystemEvent;

import lombok.Getter;

import org.springframework.stereotype.Controller;

import com.sunrise.comunicacao.servico.ManterSmsRecebidaService;
import com.sunrise.comunicacao.util.SMSUtil;
import com.sunrise.generico.bean.ManterBean;
import com.sunrise.generico.entidade.RetornoSMS;
import com.sunrise.generico.entidade.SmsRecebida;
import com.sunrise.generico.enums.TipoStatus;
import com.sunrise.generico.util.MessagesUtil;
import com.sunrise.generico.visao.Filtro;

@ManagedBean
@ViewScoped
@Controller
public class ManterSmsRecebidaBean extends ManterBean<SmsRecebida> {

	@Resource
	@Getter
	private ManterSmsRecebidaService smsRecebidaService;

	@Override
	public void inicializarEntidade() {
		setEntidade(new SmsRecebida());
	}

	@Override
	public List<SmsRecebida> iniciarlizarListEntidade() {
		return new ArrayList<SmsRecebida>();
	}

	public void buscarPorFiltros() {
		Collection<SmsRecebida> recebidas = null;
		try {
			recebidas = SMSUtil.buscarMensagens();
		} catch (Exception e) {
			MessagesUtil.addNewErrorMessage(MessagesUtil.getMessageKey("erroLeituraSmsRecebidas"), e.getMessage());
		}
		if (recebidas != null) {
			getSmsRecebidaService().inserirRecebidas(recebidas);
		}
		setEntidades(getSmsRecebidaService().buscarPorFiltros(getFiltro()));
	}

	@Override
	public void preRenderList(ComponentSystemEvent event) {
		setStatus(Arrays.asList(TipoStatus.values()));
		inicializarEntidade();
		setFiltro(new Filtro());
		buscarPorFiltros();
	}

	public void enviarResposta() {
		try {
			RetornoSMS retorno = SMSUtil.simple(getEntidade().getCelular(), getEntidade().getResposta());
			getEntidade().setRetorno(retorno);
			getEntidade().setDataResposta(new Date());
			getSmsRecebidaService().salvar(getEntidade());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void adicionarBlacklist() {
		try {
			getSmsRecebidaService().adicionarBlacklist(getEntidade());
			MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("adicionarBlacklistSucesso"));
		} catch (Exception e) {
			MessagesUtil.addNewInfoMessage(MessagesUtil.getMessageKey("erroAdicionarBlacklist"));
		}
	}

}
